/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.aspas.persistencia;


import br.com.aspas.modelo.Cursos;
import br.com.aspas.modelo.CursosEvento;
import br.com.aspas.modelo.Evento;
import br.com.aspas.util.AbstractDAO;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;

/**
 *
 * @author gimmli
 */
public class CursoDao extends AbstractDAO {

    public CursoDao() {
    }

    public void inserir(Cursos cursos) {
        insert(cursos);
    }

    public Cursos findByPk(Integer pKey) {
        return (Cursos) findByPk(Cursos.class, pKey);
    }

    public Boolean remove(Integer id) {
        delete(id, Cursos.class);
        return new Boolean(true);
    }

    public void altera(Cursos cursos) {
        update(cursos);
    }

    public List<Cursos> findAllCursos() {
        em = emf.createEntityManager();
        List<Cursos> listCursos = em.createQuery("SELECT object(c) FROM Cursos as c").getResultList();
        em.close();
        return listCursos;
    }

    public List<Cursos> findALLPeriodoCurso(Date dataInicial, Date dataFinal) {
        em = emf.createEntityManager();
        List<Cursos> listCursos = null;
        Query query = em.createQuery("SELECT object(c) FROM Cursos as c "
                + " where dataCurso between :dataInicial and :dataFinal");
        query.setParameter("dataInicial", dataInicial);
        query.setParameter("dataFinal", dataFinal);
        listCursos = query.getResultList();
        em.close();
        return listCursos;
    }

    public List<CursosEvento> findALLDataCurso(Date dataCurso, Evento evento) {
        em = emf.createEntityManager();
        List<CursosEvento> listCursos = null;
        Query query = em.createQuery("SELECT object(c) FROM CursosEvento as c "
                + " where c.data =:data and c.evento.codigo = :evento ORDER BY c.cursos.nome");
        query.setParameter("data", dataCurso);
        query.setParameter("evento", evento.getCodigo());
        listCursos = query.getResultList();
        em.close();
        return listCursos;
    }

    public CursosEvento getCursoEvento(Integer codigoCurso, Evento evento) {
        em = emf.createEntityManager();
        Query query = em.createQuery("SELECT object(c) FROM CursosEvento as c "
                + " where c.cursosEventoPK.curso =:curso and c.cursosEventoPK.evento = :evento");
        query.setParameter("curso", codigoCurso);
        query.setParameter("evento", evento.getCodigo());
        CursosEvento cursosEvento = (CursosEvento) query.getSingleResult();
        em.close();
        return cursosEvento;

    }
    
    public List<CursosEvento> getCursosEvento(Evento evento){
        em = emf.createEntityManager();
        Query query = em.createQuery("SELECT object(c) FROM CursosEvento as c WHERE c.cursosEventoPK.evento = :evento ORDER BY c.data,c.cursos.nome");
        query.setParameter("evento", evento.getCodigo());
        List<CursosEvento> listCursosEvento = query.getResultList();
        em.close();
        return listCursosEvento;
    }
    
    public void alteraCursosEvento(CursosEvento cursosEvento){
        update(cursosEvento);
    }
}
